#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //Qt::WindowFlags flags = 0;
    //flags |= Qt::WindowMinimizeButtonHint; /* 禁止最大化 */
    //setWindowFlags(flags);
    //QSize size = ui->MyScreen->baseSize();
    //setFixedSize(size.width(),size.height());
    //setFixedSize(800, 600); /* 禁止改变窗口大小 */

    iPlayPause = 0;
    connect(ui->Backward,  SIGNAL(clicked()), this, SLOT(SlotsBackward()));
    connect(ui->Forward,   SIGNAL(clicked()), this, SLOT(SlotsForward()));
    connect(ui->PlayPause, SIGNAL(clicked()), this, SLOT(SlotsPlayPause()));
    connect(ui->Stop,      SIGNAL(clicked()), this, SLOT(SlotsStop()));
    connect(ui->OpenFile,  SIGNAL(clicked()), this, SLOT(SlotsOpenFile()));

    /* CreateSDLWindow(ui->SDLWindow); */
    CreateSDLWindow(ui->SDLWindow_2);
}

MainWindow::~MainWindow()
{
    delete ui;
}

/* 快退 */
void MainWindow::SlotsBackward(void)
{
    qDebug("Backward");
}

/* 快进 */
void MainWindow::SlotsForward(void)
{
    qDebug("Forward");
}


/* 第一次点下去从播放变为暂停，以后每次布尔状态切换播放和暂停状态 */
void MainWindow::SlotsPlayPause(void)
{
    if (getPlayState() == 0)
    {
        qDebug("Play: %s", GetFileName());
        setPlayState(1);
    }
    else
    {
        qDebug("Pause");
        setPlayState(0);
    }
}

/* 停止当前的播放 */
void MainWindow::SlotsStop(void)
{
    qDebug("Stop");
}

/* 获取当前的播放状态，播放还是暂停 */
int MainWindow::getPlayState(void)
{
    return iPlayPause;
}

/* 设置当前的播放状态，播放还是暂停 */
void MainWindow::setPlayState(int i)
{
    iPlayPause = i;
}

/* 与OPEN按钮关联的动作，显示文件选择对话框，让用户选择想要打开的文件 */
void MainWindow::SlotsOpenFile(void)
{
    qDebug("Open File");
    QFileDialog *fd = new QFileDialog(this);
    fd->setModal(QFileDialog::ExistingFile);    /* 设置模式为存在的文件 */
    fd->setViewMode(QFileDialog::Detail);       /* 设置显示模式为详细 */
    fd->setFilter("Video (*.mpeg *.avi)");      /* 设置过滤器，显示特定后缀名的文件 */

    if (fd->exec() == QDialog::Accepted)
    {
        QString file = fd->selectedFiles()[0];  /* 取得选择的文件，包括了绝对路径 */
        //qDebug(file.toAscii().data());
        SaveFileName(file);
    }
}

/* 将想要打开的媒体文件的名字保存到一个数组里面,方便使用 */
void MainWindow::SaveFileName(QString file)
{
    memset(caFileName, 0, FILE_NAME_LENGTH);
    strcpy(caFileName, file.toAscii().data());
}

/* 获取想要打开的媒体文件的名字 */
char* MainWindow::GetFileName(void)
{
    return caFileName;
}

/* 把一个QT的窗口交给SDL使用 */
void MainWindow::CreateSDLWindow(QWidget *widget)
{
    /* QWidget *widget = ui->SDLWindow; */

    {
        /* 使用SDL的关键步骤 */
        /* char winID[32] = {0}; */
        /* sprintf(winID, "SDL_WINDOWID=0x%lx", (long unsigned int)widget->winId()); */
        /* SDL_putenv(winID); */

        /* /1* 初始化SDL *1/ */
        /* if (SDL_Init(SDL_INIT_VIDEO) < 0) */
        /* { */
        /*     fprintf(stderr, "Video initialization failed: %s\n", */
        /*             SDL_GetError()); */
        /* } */

        /* 开辟一个线程，用来对SDL的窗口进行操作，传递的参数是为了得到窗口的大小 */
        SDL_CreateThread(sdl_main_loop, (void*)widget);
    }
}
